#include<unistd.h>
#include<string.h>
#include<assert.h>
using namespace std;
class String
{
  public:
    String(const char* str="")
    {
      if(NULL==str)
      {
        assert(false);
        return;
      }
    _ret=new char[strlen(str)+1];
    strcpy(_ret,str);
    }
    String(const String& s)
     :_ret(new char[strlen(s._ret)+1])
    {
       strcpy(_ret,s._ret);
    }
    String& operator=(const String& x)
    {
      if(this!=&x)
      {
        delete[] _ret;
        char* tmp=new char[strlen(x._ret)+1];
        strcpy(tmp,x._ret);
        _ret=tmp;
      }
      return *this;
    }
    ~String()
    {
      if(_ret)
      {
        delete[] _ret;
        _ret=NULL;
      }
    }
  private:
    char* _ret;
};

int main()
{
  String s1("haha");
  String s2(s1);
  return 0;
}
